<?php
/* 	
	OpenDb Media Collector Database
	Copyright (C) 2001,2006 by Jason Pell

	This program is free software; you can redistribute it and/or
	modify it under the terms of the GNU General Public License
	as published by the Free Software Foundation; either version 2
	of the License, or (at your option) any later version.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with this program; if not, write to the Free Software
	Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/

/*
* Work out the DocType and namespace of the Document,
*/
class DocTypeNameSpaceXMLParser
{
	var $_docType;
	var $_nameSpace;
	var $_errors;

	function DocTypeNameSpaceXMLParser()
	{
	}
	
	function parseFile($fileLocation) {
		// reset it.
		$this->_docType = NULL;
		$this->_nameSpace = NULL;
		$this->_errors = NULL;
			
		$fp = @fopen($fileLocation, 'r');
		if($fp) {
			$parser = xml_parser_create('ISO-8859-1');
		    xml_set_object($parser, $this);
		    xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, FALSE);
		    xml_set_element_handler($parser, "_startElement", "_endElement");
	
			while ($data = fread($fp, 1024))
			{
				if(strlen($this->_docType) > 0)
				{
					break;
				}
	
				if(!xml_parse($parser, $data, feof($fp)))
				{
					$error = xml_error_string(xml_get_error_code($parser));
					break;
				}
			}
			xml_parser_free($parser);
			
			@fclose(fp);
			return TRUE;
		} else {
			$this->_errors[] = 'File '.$fileLocation.' could not be opened.';
			return FALSE;
		}
	}
	
	function getErrors() {
		return $this->_errors;
	}
	
	function getDocType()
	{
		return $this->_docType;
	}
	
	function getNameSpace()
	{
		return $this->_nameSpace;
	}

	/**
	 * xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	 * xsi:schemaLocation="http://opendb.iamvegan.net/xsd/Items-1.3.xsd"
	 *
	 * @param unknown_type $parser
	 * @param unknown_type $name
	 * @param unknown_type $attributes
	 */
	function _startElement($parser, $name, $attributes)
	{
		if(strlen($this->_docType) == 0) {
			$this->_docType = $name;
		
			if(is_array($attributes)) {
				reset($attributes);
				while(list($name,$value) = each($attributes)) {
					
					if(ends_with($name, ":schemaLocation")) {
						$this->_nameSpace = $value;
						break;
					}
				}
			}						
		}
	}

	function _endElement($parser,$name)
	{
    	// not used
	}
}
?>
